package com.koron.css2.serviceManage.mapper;

import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;

public interface DatabaseOracleMapper {

	/**
	 * 创建数据表空间
	 * 
	 * @param name     表空间名称
	 * @param location
	 * @return
	 */
	void oralceCreateTableSpace(@Param("name") String name, @Param("location") String location);

	/**
	 * 创建临时表空间
	 * 
	 * @param name     表空间名称
	 * @param location
	 * @return
	 */
	void oracleCreateTempTableSpace(@Param("name") String name, @Param("location") String location);

	/**
	 * 创建数据库账户
	 * 
	 * @param dbAccount
	 * @param dbPassWord
	 * @return
	 */
	void oracleCreateDbUser(@Param("dbAccount") String dbAccount, @Param("dbPassWord") String dbPassWord,
			@Param("datTableSpace") String datTableSpace, @Param("tmpTableSpace") String tmpTableSpace);

	/**
	 * 授权数据库用户
	 * 
	 * @param dbAccount
	 * @param name      表空间名称
	 */
	void oracleGrantDbUser(@Param("dbAccount") String dbAccount);

	/**
	 * 单独修改数据库用户使用表空间的权限
	 * 
	 * @param name 表空间名称
	 * @return
	 */
	void oracleAlertDbUser(@Param("dbAccount") String dbAccount, @Param("tableSpace") String tableSpace);

	/**
	 * 查询所有表名
	 * 
	 * @param dbAccount
	 * @return
	 */
	List<String> oracleSelectAllTables(@Param("dbAccount") String dbAccount);

	/**
	 * 创建所有表并设置数据表空间
	 * 
	 * @param dataSourceAccount 数据源账号
	 * @param dbAccount         目标账号
	 * @param tableName
	 * @param tableSpace
	 * @return
	 */
	void oracleCreateAllTables(@Param("dataSourceAccount") String dataSourceAccount,
			@Param("targetAccount") String targetAccount, @Param("tableName") String tableName,
			@Param("tableSpace") String tableSpace);

	/**
	 * 查询表注释
	 * @param tableName
	 * @return
	 */
	List<HashMap<String, String>> oracleSelectTableComment(@Param("dataSourceAccount") String dataSourceAccount);

	/**
	 * 创建表注释
	 * @param tableName
	 * @param comment
	 */
	void oracleCreateTableComment(@Param("tableName") String tableName, @Param("comment") String comment);

	/**
	 * 查询字段表注释
	 * @param tableName
	 * @return
	 */
	List<HashMap<String, String>> oracleSelectTableColumnComment(@Param("dataSourceAccount") String dataSourceAccount);

	/**
	 * 创建字段表注释
	 * @param tableName
	 * @param comment
	 */
	void oracleCreateTableColumnComment(@Param("tableName") String tableName, @Param("columnName") String columnName, @Param("comment") String comment);

	/**
	 * 查询数据源账号的主键
	 */
	List<HashMap<String, String>> oracleSelectTablePrimary();

	/**
	 * 创建表主键
	 * @param tableName
	 * @param primaryName
	 * @param columnNames
	 */
	void oracleCreateTablePrimary(@Param("tableName") String tableName, @Param("primaryName") String primaryName, @Param("columnNames") String columnNames, @Param("inxTableSpace") String inxTableSpace);

	/**
	 * 查询数据源账号的索引
	 */
	List<HashMap<String, String>> oracleSelectTableIndex();

	/**
	 * 创建表索引
	 * @param tableName
	 * @param indexName
	 * @param columnNames
	 */
	void oracleCreateTableIndex(@Param("tableName") String tableName, @Param("indexName") String indexName, @Param("columnNames") String columnNames, @Param("inxTableSpace") String inxTableSpace);

	/**
	 * 复制表数据
	 * 
	 * @param dataSourceAccount
	 * @param targetAccount
	 * @param tableName
	 * @return
	 */
	void oracleCopyTableData(@Param("dataSourceAccount") String dataSourceAccount,
			@Param("targetAccount") String targetAccount, @Param("tableName") String tableName);
	

}